#include<iostream>
#include<string>
#include<regex>

using namespace std;

int main()
{
    //HTTP: GET /lijiaping/login?user=laoda&pass=123132 HTTP/1.1\r\n
    string str="GET /lijiaping/login?user=laoda&pass=123132 HTTP/1.1\r\n";
    smatch matches;//存放的匹配对象
    regex e("(POST|HEAD|GET|PUT|DELETE) ([^?]*)(?:\\?(.*))? (HTTP/1\\.[01])(?:\n|\r\n)?");
    // ([^?]*)前有一个空格表示在方法之后隔一个空格开始匹配^?匹配非问号字符，即到问号停止匹配
    // //?(.*) //?表示原问号字符，起始问号，空格收尾
    //|表示或即用e来匹配str内关于e的内容,点·表示匹配除“\n”和"\r"之外的任何单个字符，*表示匹配表达式e任意次
    // (HTTP/1\\.[01])以空格HTTP/1起始，//.表示原生·，[01]表示点后匹配规则：01其中一个即可
    //(?:\n|\r\n)? ?:表示后续的内容只匹配不提取，最后的问号表示前面匹配的表达式可以是0次或者一次
    regex_match(str,matches,e);

    for(auto& s:matches)
    {
        cout<<s<<endl;
    }
    
return 0;
}